package mi.payment.utils;

/**
 * Created by KenMa on 2017/7/17.
 */

import android.text.TextUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 判断支付二维码类型，如支付宝，微信
 */

public class QRCodeTypeUtils {
    public static final int TYPE_No = 0x00;//未知
    public static final int TYPE_Alipay = 0x01;//支付宝类型
    public static final int TYPE_WeChat = 0x02;//微信类型
    public static final int TYPE_BaiduWallet = 0x03;//百度钱包类型
    public static final int TYPE_UNION = 0x04;//银联二维码类型
    public static final int TYPE_Mipay = 0x05;//小米钱包二维码类型

    private static Matcher weChatTypeMather = Pattern.compile("^1[0-5]\\d{16}$").matcher("");
    private static Matcher aliPayTypeMather = Pattern.compile("^(2[5-9]|30)\\d{14,22}$").matcher("");
    private static Matcher seriesDigitMather = Pattern.compile("^\\d++$").matcher("");

    public static boolean isDigitStr(String qrCode) {//判断是否为数字字符串
        return !TextUtils.isEmpty(qrCode) && seriesDigitMather.reset(qrCode).matches();
    }

    public static int checkQRCodeType(String qrCode) {//根据付款码的特征来判断其所属的渠道
        if (!isDigitStr(qrCode)) //只匹配全部的连续数字
            return TYPE_No;
        else if (weChatTypeMather.reset(qrCode).matches()) //微信付款码以10-15开头，长度为18位
            return TYPE_WeChat;
        else if (aliPayTypeMather.reset(qrCode).matches()) //支付宝付款码以25-30开头，长度为16-24位
            return TYPE_Alipay;
        else if (qrCode.startsWith("31") && qrCode.length() < 19)
            return TYPE_BaiduWallet;
        else if (qrCode.startsWith("62") && qrCode.length() == 19)
            return TYPE_UNION;
        else if(qrCode.startsWith("18") && qrCode.length() == 18)
            return TYPE_Mipay;
        else return TYPE_No;
    }

}
